﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Cotizav.CONEXION;
using Cotizav.CONTROLADOR.Otros;

namespace Cotizav.PRESENTACION.Familia
{
    public partial class IUFamilia : UserControl
    {
        CtrlFamilia ctFamilia;
        CtrlMarca ctMarca;

        List<MARCA> marcas;

        public IUFamilia()
        {
            InitializeComponent();
            ctFamilia = new CtrlFamilia();
            ctMarca = new CtrlMarca();
            marcas = new List<MARCA>();
        }

        internal void mostrarDatos(string idSelectedNode)
        {
            FAMILIA fam = ctFamilia.getFamilia(idSelectedNode);
            marcas = ctMarca.getListMarca(idSelectedNode);

            txtFamilia.Text = fam.nombreFamilia;
            gbInformacionBasica.Tag = idSelectedNode;

            gridMarca.DataSource = null;
            gridMarca.DataSource = marcas;
            gridMarca.ClearSelection();
            setRowsReadOnly();
            
        }

        private void setRowsReadOnly()
        {
            foreach (DataGridViewRow dr in gridMarca.Rows)
            {
                dr.ReadOnly = true;
            }
        }

        private void actualizarArbolFamilias()
        {
            PanelFamilia panfamilia = this.ParentForm as PanelFamilia;
            panfamilia.loadTreeFamilia();
        }

        private void gridMarca_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            if (gridMarca.DataSource != null)
            {
                gridMarca.Columns["idMarca"].Visible = false;
                gridMarca.Columns["nombreMarca"].HeaderText = "Marca";
                gridMarca.Columns["nombreMarca"].DisplayIndex = 1;
                gridMarca.Columns["nombreMarca"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                gridMarca.Columns["eliminado"].Visible = false;
                gridMarca.Columns["prefijo"].HeaderText = "Prefijo";
                gridMarca.Columns["prefijo"].DisplayIndex = 0;
                gridMarca.Columns["statusflag"].Visible = false;
            }
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            PanelSelectMarca dialogSelectMarca = new PanelSelectMarca(marcas);
            DialogResult dr = dialogSelectMarca.ShowDialog(this);

            if (dr == DialogResult.OK)
            {
                if (dialogSelectMarca.SelectedMarcas.Count > 0) 
                {
                    if (MessageBox.Show("¿Confirma agregar las marcas seleccionadas a la familia?", "Cotizav", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.OK)
                    {
                        if (gbInformacionBasica.Tag != null)
                        {
                            //agrego las nuevas marcas y actualizo el grid
                            List<MARCA> result = dialogSelectMarca.SelectedMarcas;
                            ctMarca.registrarListMarcaxFamilia(result, gbInformacionBasica.Tag.ToString());

                            marcas = ctMarca.getListMarca(gbInformacionBasica.Tag.ToString());
                            gridMarca.DataSource = null;
                            gridMarca.DataSource = marcas;
                            setRowsReadOnly();
                            gridMarca.ClearSelection();

                            this.actualizarArbolFamilias();
                        }
                    } 
                }
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            if (gridMarca.SelectedRows.Count > 0)
            {
                if (MessageBox.Show("¿Confirma eliminar las marcas seleccionadas de la familia?", "Cotizav", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.OK)
                {
                    if (gbInformacionBasica.Tag != null)
                    {
                        //se procede a eliminar las marcas seleccionadas
                        bool result = false;
                        foreach (DataGridViewRow dr in gridMarca.SelectedRows)
                        {
                            ctMarca.eliminarFamiliaxMarca(gbInformacionBasica.Tag.ToString(), marcas[dr.Index]);
                            result = true;
                        }

                        if (result)
                        {
                            MessageBox.Show("Marcas eliminadas", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);

                            marcas = ctMarca.getListMarca(gbInformacionBasica.Tag.ToString());
                            gridMarca.DataSource = null;
                            gridMarca.DataSource = marcas;
                            setRowsReadOnly();
                            gridMarca.ClearSelection();

                            this.actualizarArbolFamilias();
                        }
                    }
                }
            }
        }

        private void btnCambiar_Click(object sender, EventArgs e)
        {
            if (gbInformacionBasica.Tag != null)
            {
                if (!string.IsNullOrWhiteSpace(txtFamilia.Text))
                {
                    FAMILIA f = new FAMILIA()
                    {
                        nombreFamilia = txtFamilia.Text
                    };

                    bool result = ctFamilia.actualizarFamilia(gbInformacionBasica.Tag.ToString(), f);

                    if (result)
                    {
                        MessageBox.Show("Nombre de familia modificada", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);

                        marcas = ctMarca.getListMarca(gbInformacionBasica.Tag.ToString());
                        gridMarca.DataSource = null;
                        gridMarca.DataSource = marcas;
                        setRowsReadOnly();
                        gridMarca.ClearSelection();

                        this.actualizarArbolFamilias();
                    }
                }
                else
                {
                    MessageBox.Show("Campo de familia se encuentra vacío", "Cotizav", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
        }

    }
}
